package leecode

import (
	"math"
	"strconv"
)

func primePalindrome(n int) int {
	for {
		//先判断是否是回文数
		if n == isRoll(n) && isPrime(n) {
			return n
		}
		n++
		if 10_000_000 < n && n < 100_000_000 {
			n = 100_000_000
		}
	}
}

// 判断是否是回文数
func isRoll(n int) int {
	if len(strconv.Itoa(n)) == 8 {
		return -1
	}
	ans := 0
	for n > 0 {
		ans = 10*ans + (n % 10)
		n /= 10
	}
	return ans
}

// 判断是否是素数
func isPrime(num int) bool {
	if num <= 3 {
		return num > 1
	}
	// 不在6的倍数两侧的一定不是质数
	if num%6 != 1 && num%6 != 5 {
		return false
	}
	sqrt := int(math.Sqrt(float64(num)))
	for i := 5; i <= sqrt; i += 6 {
		if num%i == 0 || num%(i+2) == 0 {
			return false
		}
	}
	return true
}
